### -*- coding: utf-8 -*- #############################################
# Разработано компанией Ключевые Решения (http://keysolutions.ru/)
# Все права защищены, 2006-2007
#
# Developed by Key Solutions (http://keysolutions.ru/)
# All right reserved, 2006-2007
#######################################################################
"""News class for the Zope 3 based news package

$Id: scripts.py 44 2007-12-11 22:12:27Z Arvi3D $
"""
__author__  = "Sergey Shilov"
__license__ = "<undefined>" # необходимо согласование
__version__ = "$Revision: 44 $"
__date__ = "$Date: 2007-12-11 22:12:27 +0000 (Tue, 11 Dec 2007) $"

from zope.app.component.hooks import setSite, getSite
from psycopg2da.adapter import Psycopg2Adapter
from zope.rdb.interfaces import IManageableZopeDatabaseAdapter, IZopeDatabaseAdapter
from zope.schema.interfaces import IVocabularyFactory
from zope.app.intid import IIntIds, IntIds
from zope.app.catalog.catalog import Catalog
from zope.app.catalog.interfaces import ICatalog
from zope.interface import alsoProvides
from ks.content.eventfolder.eventfolder import EventFolder
from ks.content.newsfolder.newsfolder import NewsFolder
from ks.content.site.interfaces import ISite
from ks.content.textdocument.textdocument import TextDocument
import datetime
from zope.security.management import queryInteraction
from ks.mailer.interfaces import ITemplateAdaptable
from zope.app.zptpage import ZPTPage
from ks.channelsmtp.channelsmtp import ChannelSMTP
from ks.channelsmtp.interfaces import IChannelSMTP
from ks.mailersmtp.interfaces import IMailerSMTP
from zope.app import zapi
import re

def upgradeContextToSite(context, **kw):
    """Преобразует папку контекста в сайт"""
    from zope.app.component import site
    sm = site.LocalSiteManager(context)
    context.setSiteManager(sm)
    setSite(context)
    site = ISite(context)
    for key, value in kw.items():
        setattr(site, key, value)
    context.title = u'Arvid'
    context.annotation = u'Сайт Паэглит Арвида'
    zapi.getSiteManager(context = context.__parent__).registerUtility(context, provided=ISite, name="root")

    return "OK"

def installPsycopgDA(context, database_connection=u"db", **kw):
    """Устанавливает экземпляр PsycopgDA и регистрирует его с именем db"""
    sm = context.getSiteManager()

    sm["psycopgDA"] = Psycopg2Adapter(kw["dsn_for_ps"])
    obj = sm["psycopgDA"]
    obj.connect()

    sm.registerUtility(obj, provided=IManageableZopeDatabaseAdapter,
        name=unicode(database_connection))

    sm.registerUtility(obj, provided=IZopeDatabaseAdapter,
        name=unicode(database_connection))

    return "OK"

def installIntId(context, **kw):
    """Устанавливает экземпляр IntId и регистрирует его без имени"""
    sm = context.getSiteManager()
    sm["IntIds"] = IntIds()
    sm.registerUtility(sm["IntIds"], provided=IIntIds)

    sm["IntIds"].register(context)

    return "OK"

def installCatalog(context, database_connection=u"db", **kw):
    sm = context.getSiteManager()
    sm["Catalog"] = Catalog()
    sm.registerUtility(sm["Catalog"], provided=ICatalog)
    return "OK"

def installSQLIndexes(context, database_connection=u"db", **kw):
    """Устанавливает в каталог экземпляр SQLIndex"""
    sm = context.getSiteManager()
    #Здесь можно добавить новые индексы

    sm["Catalog"].clear()
    sm["Catalog"].updateIndexes()

    return "OK"

def installRootSQLVocabularies(context, database_connection=u"db", **kw):
    """Устанавливает SQL Vocabularies, нужные для сайта Root"""
    sm = context.getSiteManager()

#===============================================================================
#    sm["KSProductVocabulary"] = getSqlVocabularyFromSource(getattr(kscfg.sql.sqlvocabulary,
#        'KSProductVocabulary'), database_connection)
#    sm.registerUtility(sm["KSProductVocabulary"], provided=IVocabularyFactory,
#        name=u'KSProductVocabulary')
#===============================================================================

    return "OK"

def rootInstalled(context, **kw):
    return "OK"
